Skip to content

feat(studio): canvas chrome components (unwired)#2208

Merged
miguel-heygen merged 3 commits into
studio-dnd/pr16-timeline-interaction-hooksfrom
studio-dnd/pr17-canvas-chrome-components
Jul 12, 2026
Merged

feat(studio): canvas chrome components (unwired)#2208
miguel-heygen merged 3 commits into
studio-dnd/pr16-timeline-interaction-hooksfrom
studio-dnd/pr17-canvas-chrome-components

Conversation

@ukimsanov

@ukimsanov ukimsanov commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

What

the canvas-side NLE chrome, unwired: DomEditSelectionChrome (rotated selection chrome + corner handles), domEditResizeLocal (+tests, local-space resize math), useDomEditNudge (arrow-key nudge hook), PreviewOverlays (the canvas overlay stack for the NLE shell).

Why

the visible canvas editing layer, reviewable before the overlay swap rewires DomEditOverlay onto it.

How

new files compiled against the coexistence layer; TEMP(studio-dnd) entry registrations for the unwired components, removed at the app-shell swap.

Test plan

bunx vitest run domEditResizeLocal.test.ts; tsc --noEmit; fallow audit clean.


Stack position 17/25 — studio NLE overhaul (CapCut-parity timeline + canvas). Graphite manages bases; merge from #2192 upward. Temporary TEMP(studio-dnd) fallow entries (unwired-component windows) are all removed by #2213 (app-shell swap), whose tree is byte-identical to the fully-verified integration branch.

Merge invariant: #2206#2213 land as ONE ordered unit — no cherry-picks, no deploys between #2211#2213 (review-fix foliation concentrates engine wiring at #2213; seam evidence in the #2205 thread).

ukimsanov commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@miga-heygen miga-heygen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed as part of the 25-PR NLE overhaul stack. Full stack review on #2205 (the keystone). No blockers on this PR. — Miga

@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from d1e68f9 to 645a3cc Compare July 11, 2026 10:49
@ukimsanov ukimsanov force-pushed the studio-dnd/pr16-timeline-interaction-hooks branch 2 times, most recently from 3231fcf to c40be0a Compare July 11, 2026 12:51
@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from 645a3cc to dd1310c Compare July 11, 2026 12:51
@ukimsanov ukimsanov force-pushed the studio-dnd/pr16-timeline-interaction-hooks branch from c40be0a to f81114c Compare July 11, 2026 21:08
@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from dd1310c to b1fbf67 Compare July 11, 2026 21:08
@ukimsanov ukimsanov force-pushed the studio-dnd/pr16-timeline-interaction-hooks branch from f81114c to e887f6a Compare July 11, 2026 22:38
@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from b1fbf67 to 87bccab Compare July 11, 2026 22:38

@miguel-heygen miguel-heygen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review at current head 87bccab: unwired canvas chrome, imports, and lifecycle/fallow entries remain coherent; required checks green. Approving.

@ukimsanov ukimsanov force-pushed the studio-dnd/pr16-timeline-interaction-hooks branch from e887f6a to cf2e6d5 Compare July 11, 2026 23:26
@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from 87bccab to 4dc3706 Compare July 11, 2026 23:26
@ukimsanov ukimsanov force-pushed the studio-dnd/pr16-timeline-interaction-hooks branch from cf2e6d5 to dd3fb70 Compare July 12, 2026 01:03
@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from 4dc3706 to 78e78fc Compare July 12, 2026 01:03
@ukimsanov ukimsanov force-pushed the studio-dnd/pr16-timeline-interaction-hooks branch from dd3fb70 to 6f66a32 Compare July 12, 2026 01:23
@ukimsanov ukimsanov force-pushed the studio-dnd/pr17-canvas-chrome-components branch from 78e78fc to ce715a5 Compare July 12, 2026 01:23

@miguel-heygen miguel-heygen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed current head and verified the addressed feedback and required behavior. Approval is for this exact head; Graphite mergeability may still be pending.

What: the NLE clip-drag engine core: timelineClipDragPreview (zone-aware
preview placement; keeps the legacy resolveDragPreviewPlacement export until
the timeline swap), timelineClipDragCommit (drop → move/insert commit,
stacking-synced) and timelineElementsMove (batched ripple/insert move with
GSAP position shifting), with test suites.

Why: the drag-drop brain, reviewable as functions before any component
mounts it.

How: new files plus one authored intermediate (preview file = final content
+ legacy export the old engine still imports); consumes the collision/
snapping/zones/stacking modules and the coexistence layer.

Test plan: bunx vitest run on both test suites; tsc --noEmit; fallow audit
clean.
What: the timeline-side wiring layer, unwired: TimelineLanes (the lane
renderer driving drag/resize/marquee), timelineMarquee (+tests),
useTimelineStackingSync, useTimelineGeometry, useTimelineEditPinning,
useTimelineEditingDrops.

Why: everything between the pure drag math and <Timeline> itself; the
timeline-glue swap PR then only rewires Timeline/TimelineCanvas onto these.

How: new files, tsc-clean against the coexistence layer. Unwired components
carry TEMP(studio-dnd) entry registrations, removed at the app-shell swap.

Test plan: bunx vitest run timelineMarquee.test.ts; tsc --noEmit; fallow
audit clean.
What: the canvas-side NLE chrome, unwired: DomEditSelectionChrome (rotated
selection chrome + corner handles), domEditResizeLocal (+tests, local-space
resize math), useDomEditNudge (arrow-key nudge hook), PreviewOverlays (the
canvas overlay stack for the NLE shell).

Why: the visible canvas editing layer, reviewable before the overlay swap
rewires DomEditOverlay onto it.

How: new files compiled against the coexistence layer; TEMP(studio-dnd)
entry registrations for the unwired components, removed at the app-shell
swap.

Test plan: bunx vitest run domEditResizeLocal.test.ts; tsc --noEmit; fallow
audit clean.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants